<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Dashboard</title>
    <!-- 引入 ECharts 文件 -->
    <script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.4.1/echarts.min.js"></script>
    <style>
        /* 添加一些样式 */
        body {
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 0;
            display: flex;
            background: linear-gradient(to right, #4facfe 0%, #00f2fe 100%); /* 渐变背景 */
            color: white; /* 确保文本颜色与背景色对比度高 */
        }
        .table-container {
            width: 50%;
            padding: 20px;
            box-sizing: border-box;
        }
        .charts-container {
            display: flex;
            flex-direction: column;
            width: 50%;
            padding: 20px;
            box-sizing: border-box;
        }
        .charts-row {
            display: flex;
            flex-direction: row;
            flex-wrap: nowrap;
            justify-content: space-between;
        }
        .chart {
            width: 100%;
            box-sizing: border-box;
        }
        #sourceChart {
            height: calc(50% - 10px); /* 占据上半部分 */
        }
        .charts-row {
            flex: 1; /* 剩余空间 */
            display: flex;
            flex-direction: row;
        }
        .charts-row .chart {
            width: calc(50% - 10px); /* 减去一定的间距 */
            height: 100%; /* 填充剩余空间 */
            margin-bottom: 0;
        }
        table {
            width: 100%;
            border-collapse: collapse;
            margin-bottom: 20px;
            height: calc(100vh - 80px); /* 根据视口高度调整表格高度 */
            overflow-y: auto; /* 如果数据过多则启用滚动条 */
            background-color: rgba(255, 255, 255, 0.9); /* 半透明白色背景 */
        }
        th, td {
            border: 1px solid white;
            padding: 8px;
            text-align: left;
            color: black; /* 确保文本颜色与表格背景色对比度高 */
        }
        .yes-cell {
            background-color: yellow; /* 或者任何其他你想使用的颜色 */
            font-weight: bold;
            color: red; /* 文字颜色也可以改变 */
        }
    </style>
</head>
<body>
    <div class="table-container">
        <!-- 动态表格 -->
        <table id="userBehaviorTable">
            <caption>实时滚动用户行为</caption>
            <thead>
                <tr>
                    <th>用户ID</th>
                    <th>时间戳</th>
                    <th>作品ID</th>
                    <th>点赞</th>
                    <th>评论</th>
                    <th>收藏</th>
                </tr>
            </thead>
            <tbody></tbody>
        </table>
    </div>
    <div class="charts-container">
        <!-- 柱状图 -->
        <div id="sourceChart" class="chart"></div>
        <!-- 饼图行 -->
        <div class="charts-row">
            <!-- 饼图 1 -->
            <div id="fansPieChart" class="chart"></div>
            <!-- 饼图 2 -->
            <div id="finashPieChart" class="chart"></div>
        </div>
    </div>

    <script>
        // 使用 AJAX 获取数据
        function fetchData(url) {
            return fetch(url)
                .then(response => response.json())
                .catch(error => console.error('Error:', error));
        }

        // 初始化柱状图
        async function initSourceChart() {
            const chart = echarts.init(document.getElementById('sourceChart'));
            const data = await fetchData('/source_counts/');
            chart.setOption({
                backgroundColor: 'transparent', /* 设置背景色为透明 */
                title: { text: '来源数据统计' },
                tooltip: {},
                xAxis: {
                    type: 'category',
                    data: data.map(item => item.source)
                },
                yAxis: {
                    type: 'value'
                },
                series: [{
                    data: data.map(item => item.count),
                    type: 'bar'
                }]
            });
        }

        // 初始化饼图
        async function initFansPieChart() {
            const chart = echarts.init(document.getElementById('fansPieChart'));
            const data = await fetchData('/fans_counts/');
            chart.setOption({
                backgroundColor: 'transparent', /* 设置背景色为透明 */
                title: { text: '粉丝数据统计' },
                tooltip: {},
                series: [
                    {
                        type: 'pie',
                        radius: '50%',
                        data: data.map(item => ({name: item.fans, value: item.count}))
                    }
                ]
            });
        }

        async function initFinashPieChart() {
            const chart = echarts.init(document.getElementById('finashPieChart'));
            const data = await fetchData('/finash_counts/');
            chart.setOption({
                backgroundColor: 'transparent', /* 设置背景色为透明 */
                title: { text: '完播率数据统计' },
                tooltip: {},
                series: [
                    {
                        type: 'pie',
                        radius: '50%',
                        data: data.map(item => ({name: item.finash, value: item.count}))
                    }
                ]
            });
        }

        // 更新表格数据
        async function updateUserBehaviorTable() {
            const data = await fetchData('/user_behavior/');
            const sortedData = data.slice(0, 15); // 显示前15条数据
            const tbody = document.getElementById('userBehaviorTable').getElementsByTagName('tbody')[0];
            tbody.innerHTML = '';
            sortedData.forEach(function(row) {
                const tr = document.createElement('tr');
                tr.innerHTML = `
                    <td>${row.user_id}</td>
                    <td>${row.timestamp}</td>
                    <td>${row.opus_id}</td>
                    <td>${formatYesNo(row.thumb)}</td>
                    <td>${formatYesNo(row.comment)}</td>
                    <td>${formatYesNo(row.collection)}</td>
                `;
                tbody.appendChild(tr);
            });
        }

        // 格式化 YES 或 NO 并返回特殊标记的 HTML 字符串
        function formatYesNo(value) {
            if (value === 'YES') {
                return `<span class="yes-cell">${value}</span>`;
            } else {
                return value;
            }
        }

        // 初始化所有图表和表格
        async function initAll() {
            await initSourceChart();
            await initFansPieChart();
            await initFinashPieChart();
            await updateUserBehaviorTable();
        }

        // 调用初始化函数，并设置定时刷新
        initAll();
        setInterval(initAll, 5000); // 每5秒刷新一次
    </script>
</body>
</html>